package com.burst.reptile.modular.zp.service;

import java.util.List;

import org.quartz.SchedulerException;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.burst.reptile.common.exception.job.TaskException;
import com.burst.reptile.modular.api.form.QueryResForm;
import com.burst.reptile.modular.api.form.ResourcesForm;
import com.burst.reptile.modular.api.vo.PublishRes;
import com.burst.reptile.modular.system.entity.SysUser;
import com.burst.reptile.modular.zp.entity.ZpResources;

/**
 * <p>
 * 资源列表 服务类
 * </p>
 *
 * @author wujin
 * @since 2020-06-15
 */
public interface IZpResourcesService extends IService<ZpResources> {

	/**
	 * 根据推荐列表获取文章列表
	 * @param articleIds 文章ID集合
	 * @return
	 */
	List<ZpResources> listByRecId(List<Long> articleIds);

	/**
	 * 分页获取
	 * @param pageNum 页数
	 * @param limit 数量
	 * @param zpResources 获取条件
	 * @return
	 */
	Page<ZpResources> pageList(Page<ZpResources> page, ZpResources zpResources);

	/**
	 * 分页获取推荐列表
	 * @param pageNum 页数
	 * @param limit 数量
	 * @param userId 用户ID
	 * @return
	 */
	Page<ZpResources> pageListByRec(int pageNum, int limit, Long userId);

	/**
	 * 累计阅读量
	 * @param articleId 文章ID
	 * @return
	 */
	int incrRead(Long articleId);

	/**
	 * 新增文章
	 * @param resources 返回文字基础信息
	 * @return
	 */
	PublishRes add(ResourcesForm resources);
	
	/**
	 * 更新文章
	 * @param resources 返回文字基础信息
	 * @return
	 */
	PublishRes update(ResourcesForm resources);
	
	/**
	 * 定时发布
	 * @param resources 返回文字基础信息
	 * @return
	 */
	PublishRes regularRelease(ResourcesForm resources) throws SchedulerException, TaskException;
	
	/**
	 * 更新定时发布
	 * @param resources 返回文字基础信息
	 * @return
	 */
	PublishRes regularReleaseEdit(ResourcesForm resources) throws SchedulerException, TaskException;

	/**
	 * 定时发布更新信息状态
	 * @param id 信息ID
	 * @return
	 */
	void timingPublish(Long id);
	
	/**
	 * 分页搜索
	 * @param pageNum 页数
	 * @param limit 获取数量
	 * @param keyword 搜索关键词
	 * @param ik 分词
	 * @return
	 */
	Page<ZpResources> search(int pageNum, int limit, String keyword, List<String> ik);

	/**
	 * 分页获取我的资源
	 * @param page 分页信息
	 * @param query 查询条件
	 * @return
	 */
	Page<ZpResources> myPageList(Page<ZpResources> page, QueryResForm query);

	/**
	 * 获取数据列表
	 * @param query
	 * @return
	 */
	List<ZpResources> selectDataList(QueryResForm query);

	/**
	 * 删除信息
	 * @param ids
	 * @return
	 */
	int delById(Long[] ids);

	/**
	 * 加入推荐
	 * @param ids
	 * @return
	 */
	int recommend(Long[] ids);

	/**
	 * 取消推荐
	 * @param ids
	 * @return
	 */
	int unrecommend(Long[] ids);

	/**
	 * 热搜排行
	 * @param pageNum 页数
	 * @param limit 获取数量
	 * @param res 查询条件
	 * @return
	 */
	Page<ZpResources> pageListHeats(int pageNum, int limit, ZpResources res);

	/**
	 * 立即发布
	 * @param id 信息ID
	 */
	int publish(String id);

	/**
	 * 删除资源
	 * @param id 资源ID
	 * @return
	 */
	int del(String id);

	/**
	 * 删除资源
	 * @param id 资源ID
	 * @param userId 用户ID
	 * @return
	 */
	int wxdel(String id, Long userId);

	/**
	 * 微信发布铺友圈
	 * @param resources
	 * @return
	 */
	PublishRes wxadd(ResourcesForm resources);

	/**
	 * 查询标题
	 * @param page
	 * @param keyword
	 * @param ik
	 * @return
	 */
	Page<ZpResources> searchkey(Page<ZpResources> page, String keyword, List<String> ik);

	/**
	 * 分页搜索
	 * @param pageNum 页数
	 * @param limit 获取数量
	 * @param keyword 搜索关键词
	 * @param ik 分词
	 * @return
	 */
	Page<ZpResources> appsearch(Integer page, Integer limit, String keyword, List<String> ik);

	/**
	 * 类似推荐
	 * @param page 分页信息
	 * @param articleId 文章ID
	 * @param keywords 匹配关键词
	 * @return
	 */
	Page<ZpResources> recType(Page<ZpResources> page, Long articleId, String keywords);

	/**
	 * 获取用户创作列表
	 * @param page 分页信息
	 * @param query 查询条件
	 * @return
	 */
	Page<ZpResources> myCreatePageList(Page<ZpResources> page, QueryResForm query);
	
	/**
	 * 更新资源
	 * @param resources
	 * @return
	 */
	PublishRes wxupdate(SysUser user, ResourcesForm resources);

	/**
	 * 立即发布
	 * @param user
	 * @param id
	 * @return
	 */
	int wxpublish(SysUser user, String id);

	/**
	 * 分页获取推荐资源
	 * @param page 分页信息
	 * @param rec 是否推荐 0 未推荐 1 推荐
	 * @param i 铺友圈
	 * @return
	 */
	Page<ZpResources> apiPageList(Page<ZpResources> page, String rec, Integer i);

}
